package com.example;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;

public class JSONHelper {


    public static JSONObject findNodeById(JSONObject jsonData, String id) {
        try {

            if (jsonData.containsKey("nodeId")){
                if(jsonData.getString("nodeId").equals(id)) {
                    return jsonData;
                }
            }

            if (jsonData.containsKey("conditionNodes")) {
                JSONArray conditionNodes = jsonData.getJSONArray("conditionNodes");
                for (int i = 0; i < conditionNodes.size(); i++) {
                    JSONObject node = conditionNodes.getJSONObject(i);
                    JSONObject result = findNodeById(node, id);
                    if (result != null) {
                        return result;
                    }
                }
            }

            if (jsonData.containsKey("childNode")) {
                return findNodeById(jsonData.getJSONObject("childNode"), id);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }




    public static void main(String[] args) {
        // 将你的 JSON 数据以字符串形式存储
        String jsonStr = "Your JSON data as a string";

        // 将 JSON 字符串转换为 JSONObject
        JSONObject jsonData = JSONObject.parseObject(Test.str4);

        String id="72707ddd-ddc1-4a8a-bfbb-4dce7f3006e1";
        // 查找指定 ID 的节点
        String idToFind = "037a6794-dd2d-43e4-a115-dd95c207b913";
        JSONObject json=jsonData.getJSONObject("nodeConfig");
        JSONObject resultNode = findNodeById(json, idToFind);
    //    String parent=findParentNodeId(json,idToFind);
      //  JSONObject parentJson=findNodeById(json, parent);
        JSONArray array=extractNodes(Test.str4);

        System.out.println(resultNode);
        JSONObject obj=getJSONObjectById(array,id);
        System.out.println(obj);
     //   System.out.println(parent);
    //    System.out.println(parentJson);
    }

    public static JSONObject getJSONObjectById(JSONArray array,String id){
        for (int i = 0; i < array.size() ; i++) {
            JSONObject obj=array.getJSONObject(i);
            String nodeId=obj.getString("nodeId");
            if(nodeId.equals(id)){
                return obj;
            }
        }
        return null;
    }

    public static JSONArray extractNodes(String jsonData) {
        JSONArray result = new JSONArray();

        try {
            // 解析传入的 JSON 数据
            JSONObject jsonObj = JSONObject.parseObject(jsonData);

            // 提取根节点信息
            JSONObject rootNode = jsonObj.getJSONObject("nodeConfig");
            extractNodeInfo(rootNode, null, result);

        } catch (JSONException e) {
            e.printStackTrace();
        }

        return result;
    }

    private static void extractNodeInfo(JSONObject node, String parentNodeId, JSONArray result) throws JSONException {
        // 提取当前节点信息
        String nodeId = node.getString("nodeId");
        String nodeName = node.getString("nodeName");
        Integer nodeType=node.getInteger("type");
        // 构建当前节点信息的 JSON 对象
        JSONObject currentNode = new JSONObject();
        currentNode.put("nodeId", nodeId);
        currentNode.put("nodeName", nodeName);
        currentNode.put("parentNode", parentNodeId);
        currentNode.put("type",nodeType);

        // 将当前节点信息添加到结果数组中
        result.add(currentNode);

        // 处理子节点信息
        if (node.containsKey("childNode")) {
            JSONObject childNode = node.getJSONObject("childNode");
            extractNodeInfo(childNode, nodeId, result);
        }

        if (node.containsKey("conditionNodes")) {
            JSONArray conditionNodes = node.getJSONArray("conditionNodes");
            for (int i = 0; i < conditionNodes.size(); i++) {
                JSONObject conditionNode = conditionNodes.getJSONObject(i);
                extractNodeInfo(conditionNode, nodeId, result);
            }
        }
    }



    /**
     * 当前的节点 currentId
     * 下一个节点 nextId (多个用,连接)
     * 当前节点的终点 endId
     * @param json
     * @return
     */
    public static JSONObject getNextNode(JSONObject json,JSONObject formData){
        JSONObject jsonObject=new JSONObject();
        if(json.containsKey("conditionNodes")){
            System.out.println("需要走完这些才能走 childNode");
            JSONArray array=json.getJSONArray("conditionNodes");
            for (int i = 0; i < array.size() ; i++) {
                JSONObject object=array.getJSONObject(i);
                if(object.containsKey("conditionList")){
                    //且或非
                    String conditionMode=String.valueOf(object.get("conditionMode"));
                    JSONArray conditionList=object.getJSONArray("conditionList");
                    boolean isConditionMode=true;
                    if(conditionList!=null && conditionList.size() >0){
                        for (int j = 0; j < conditionList.size() ; j++) {
                            JSONObject obj=conditionList.getJSONObject(j);
                            String field=String.valueOf(obj.get("field"));
                            String value=String.valueOf(obj.get("value"));
                            String operator=String.valueOf(obj.get("operator"));

                        }
                    }
                    System.out.println("验证完 conditionList");

                    if(object.containsKey("childNode")){
                        System.out.println("下一个要走的");
                        return object;
                    }
                }
            }
        }
        if(json.containsKey("childNode")){
            System.out.println("开始走 childNode");
        }
        return jsonObject;
    }



}
